<?php

class User extends CActiveRecord
{
	/**
	 * The followings are the available columns in table 'tbl_user':
	 * @var integer $id
	 * @var string $username
	 * @var string $password
	 * @var string $email
	 * @var string $profile
	 */

	/**
	 * Returns the static model of the specified AR class.
	 * @return CActiveRecord the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return '{{user}}';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('username, password, email', 'required'),
			array('username, password, email', 'length', 'max'=>128),
			array('profile', 'safe'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(

		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'Id',
			'username' => 'Username',
			'password' => 'Password',
			'email' => 'Email',
			'profile' => 'Profile',
		);
	}

	/**
	 * Checks if the given password is correct.
	 * @param string the password to be validated
	 * @return boolean whether the password is valid
	 */
	public function validatePassword($password)
	{
		return CPasswordHelper::verifyPassword($password,$this->password);
	}

	/**
	 * Generates the password hash.
	 * @param string password
	 * @return string hash
	 */
	public function hashPassword($password)
	{
		return CPasswordHelper::hashPassword($password);
	}
        
        public function createHash($string) {
            return hash('sha512', $string);
        }

        public function createSalt() {
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()!@#$%^&*()!@#$%^&*()";
            $str = '';
            $size = strlen($chars);
            for ($i = 0; $i < $this->saltLength; $i++) {
                $str .= $chars[rand(0, $size - 1)];
            }
            return $str;
        }

        public function islogin() {
            $session = new CHttpSession();
            $session->open();
            if ($session['user'] == NULL)
                return FALSE;
            else
                return TRUE;
        }

        public function logout() {
            $session = new CHttpSession();
            $session->open();
            $session['user'] = NULL;
            setcookie('token', ' ', time() - 3600, '/');
            setcookie('timestamp', ' ', time() - 3600, '/');
        }
        
        
        public function updateUserToSession($remember = FALSE) {
            $session = new CHttpSession();
            $session->open();
            if ($remember)
                $session->timeout = Configuration::model()->getConfig('tokenExpriedTime') * 3600 * 24;
            $user = $this->model()->findByPk($this->id);
            if (!isset($user))
                return FALSE;
            else
                $session['user'] = $user;
            return TRUE;
        }

         public function login($remember) {            
            $this->updateUserToSession($remember);               
            $session = new CHttpSession();
            $session->timeout = 3 * 3600 * 24;
            $session->open();            
            //$accessToken->setCookie();
            return TRUE;            
        }
        
        public function checkPassword($password) {
            if ($this->createHash($password . $this->salt) == $this->password)
                return TRUE;
            else
                return FALSE;
        }

        public function getUserFromUsername($username) {
            return $this->model()->find('username=:username', array(
                        ':username' => $username,
                    ));
        }
        public function currentUser() {
               $session = new CHttpSession();
               $session->open();
               if (isset($session['user'])) {
                   $user = $session['user'];
                   $newUser = self::model()->findByPk($user->id);
                   $session['user'] = $newUser;
                   return $newUser;
               }
               else
                   return NULL;
           }

           public function getCurrentUserName() {
               if ($this->currentUser())
                   return $this->currentUser()->username;
               else
                   return NULL;
           }
}
